package com.xyoto.community.mapper.love;

import com.xyoto.community.entity.love.DynamicCommentLove;
import com.xyoto.community.po.DynamicCommentLoveCountPO;
import com.xyoto.community.po.MessageDynamicCommentLovePO;
import com.xyoto.community.po.UserDynamicCommentLovePO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 动态评论点赞表mapper
 */
public interface DynamicCommentLoveMapper {
    /**
     * 新增动态评论点赞
     *
     * @param dynamicCommentLove
     * @return
     */
    Integer insertOne(DynamicCommentLove dynamicCommentLove);

    /**
     * 根据用户id和动态评论id查动态评论点赞记录
     *
     * @param userId
     * @param dynamicCommentId
     * @return
     */
    DynamicCommentLove selectOneByUserIdAndDynamicCommentId(@Param("userId") Integer userId, @Param("dynamicCommentId") Integer dynamicCommentId);

    /**
     * 根据实体类更新动态评论点赞表
     * @param dynamicCommentLove
     * @return
     */
    Integer updateDynamicCommentLove(DynamicCommentLove dynamicCommentLove);

    /**
     * 取消动态评论点赞
     *
     * 可以复用updateDynamicCommentLove方法
     *
     * @param dynamicCommentLove 实体
     * @return
     */
    @Deprecated
    Integer removeDynamicCommentLoeByDynamicCommentId(DynamicCommentLove dynamicCommentLove);

    /**
     * 获取用户点赞状态
     * @param commentId 评论id
     * @param userId 用户id
     * @return 点赞状态
     */
    Short selectUserLoveStatus(Integer commentId , Integer userId,Short deleteStatus);

    /**
     * 动态评论点赞列表
     * @param dynamicCommentLoveIds 动态评论点赞id集合
     * @return 动态点赞信息列表
     */
    List<MessageDynamicCommentLovePO> getDynamicCommentLoveListByIds(List<Integer> dynamicCommentLoveIds);

    /**
     * 统计指定用户id的所有动态评论获赞数
     * @param userId
     * @return
     */
    Integer countLoveByUerId(Integer userId);

    /**
     * 根据动态评论id集合查询动态评论点赞数目
     * @param commentIds
     * @return
     */
    List<DynamicCommentLoveCountPO> getDynamicCommentLoveCount(List<Integer> commentIds);

    /**
     * 根据用户id和评论id集合查询评论点赞状态
     * @param userId
     * @param commentIds
     * @return
     */
    List<UserDynamicCommentLovePO> getUserDynamicCommentLoveStatus(Integer userId, List<Integer> commentIds);

    List<DynamicCommentLove> getAll(short loveStatus);
}
